public class PrimePrinter2 {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        int max = 20000;
        boolean[] isComposite = new boolean[max + 1];  // 标记非素数（合数）
        int count = 0;

        // 埃氏筛法核心：标记所有非素数
        for (int p = 2; p * p <= max; p++) {
            if (!isComposite[p]) {  // 如果p是素数，则标记其倍数为非素数
                for (int multiple = p * p; multiple <= max; multiple += p) {
                    isComposite[multiple] = true;
                }
            }
        }

        // 打印素数（未被标记的即为素数）
        for (int i = 2; i <= max; i++) {
            if (!isComposite[i]) {
                System.out.printf("%-6d", i);
                count++;
                if (count % 5 == 0) {
                    System.out.println();
                }
            }
        }

        long endTime = System.currentTimeMillis();
        System.out.println("\n\n程序运行时间：" + (endTime - startTime) + "ms");
    }
}